It is often necessary to update computer programs. However, existing methods of updating a program often require user interaction. For example, a user can choose to update a program by downloading a file across the Internet from a remote server, and install that file. Often, to install the update, the program that is being updated must be closed during the update process, or restarted at the end of the update process.
It would be beneficial to have a computer system that dynamically updates a computer program while it is running, without having to shut down the computer program that is being updated.
Moreover, after a program is released, the developers of the program have difficulties in determining what parts of the program should or must be changed. Developers rely on messages (often cryptic) from users that explain problems or express wishes for additional features. In some instances, the users simply stop using a program that does not operate correctly or that does not have the features or sophistication required by the user.
Developers express the need for a system to allow the developer to remotely monitor the operation of a computer program, and where desirable, change, update or enhance the operation of the computer program while it is being used.
For example, consider a user playing a computer game. It would be desirable if the creator of the computer game could remotely monitor a number of users playing the game. The creator would like to determine which features the users like and use often, and which features the users do not use. The creator would like to see what parts of the game the users find too easy or too hard. Based on this, it would be useful if the creator could change the operation of the game as it is being played by users, for example, by changing game logic or artificial intelligence, changing game parameters, adding new worlds or characters, changing lighting or sound effects, and the like. Users would then find the game more exciting, dynamic and challenging.